package com.tedu.day08springmvc.controller;

import com.tedu.day08springmvc.mapper.UserMapper;
import com.tedu.day08springmvc.pojo.dto.UserDTO;
import com.tedu.day08springmvc.pojo.entity.User;
import com.tedu.day08springmvc.pojo.vo.UserVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

//@Controller
//使用该注解后，所有方法不用再单独添加@ResponseBody注解了
@RestController
public class UserController {
    @Autowired
    private UserMapper userMapper;
    /*
       //和用户相关的业务操作
       http://localhost:8080/users/reg?参数...
       http://localhost:8080/users/delete?参数...
       http://localhost:8080/users/update?参数...
       //和微博相关的业务操作
       http://localhost:8080/weibo/insert?参数...
     */
//    @RequestMapping("/users/reg")
    @PostMapping("/users/reg")
//    @ResponseBody
    public String reg(UserDTO userDTO){
        User user = new User();
        System.out.println(user);
        //Spring核心框架提供了一个工具，可以便捷的拷贝对象属性值
        //要保证两个对象属性的类型和名字一致。
        BeanUtils.copyProperties(userDTO,user);//将userDTO的属性值拷贝到user对应属性中
        user.setCreated(new Date());//设置注册时间
        System.out.println(user);
        userMapper.insertUser(user);
        return "注册成功";
    }

    /*
        http://localhost:8080/users/delete?id=22


        http://localhost:8080/users/delete/22
     */
//    @RequestMapping("/users/delete")
    @DeleteMapping("/users/delete/{id}")
//    @ResponseBody
    public String delete(@PathVariable int id){
        int num = userMapper.deleteUser(id);
        return num>0?"删除成功":"删除失败";
    }

    /*
        http://localhost:8080/uses/update?username=xxx&password=xxx&nickname=xxx&age=xxx
     */
//    @RequestMapping(value = "/users/update",method = RequestMethod.PUT)
    @PutMapping("/users/update")
//    @ResponseBody
    public String update(UserDTO userDTO){
        User user = new User();
        BeanUtils.copyProperties(userDTO,user);
        int num = userMapper.updateUser(user);
        return num>0?"修改成功":"修改失败";
    }

    /**
     * 查询所有的用户信息，要给浏览器展示用户的名字，昵称，年龄，注册时间
     * pojo:简单的java对象
     *  -DTO:数据传输对象，表达的是浏览器传递给服务端的数据
     *  -Entity:实体对象，表达的是表中的一条记录
     *  -VO(View Object):视图对象，表示要在浏览器展现的数据
     */
//    @RequestMapping注解中的method属性用于指定当前方法仅处理客户端的特定请求方式
//    method = RequestMethod.GET 表示本方法仅处理GET形式请求
//    @RequestMapping(value = "/users/find",method = RequestMethod.GET)
//    SprintMVC框架提供了便捷的注解代替上面的写法:
//    @GetMapping("/users/find")等同于@RequestMapping(value="/users/find",method=RequestMethod.GET)
    @GetMapping("/users/find")
//    @ResponseBody
    public List<UserVO> find(){
        //直接将UserMapper查询出来的集合直接返回即可
        List<UserVO> userList = userMapper.selectUsers();
        /*
            当我们返回一个对象时，@ResponseBody会将它转变为一个json格式的字符串发送给浏览器
            json:JavaScript Object Notation  : JavaScript对象表示法
         */
        return userList;
    }

    /*
        例如:测试查看id为12的用户信息
        GET http://localhost:8080/users/find/12
     */
    public UserVO findById(int id){
        return null;
    }
}
